/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

package propres;
import java.util.*;
/**
 *
 * @author neochange
 */
public class pagos {

	public String pagar_todo (dieta D,List<Date> ldates, List<String> lcomidas) throws Exception//el primero lo haria???
	{
                String existe="ok";
		List<dia> dias = D.consultar_dias();
                if(dias.isEmpty())existe="dieta vacia";
		Iterator it = dias.iterator();
		dia d;
		int i=0;
		
		if(!dias.isEmpty())
		{
			while(it.hasNext())
			{
				d=dias.get(i);
				//d.pagar_dia();
                                d.pagar_dia(ldates,lcomidas);
				
				it.next();
				i++;
			}
		}
                return existe;
	}
 
 
	public String pagar_dia (dieta D,Date dia,List<Date> ldates,List<String> lcomidas) throws Exception//
	{
                String error="dia no incluido en la dieta";
		List<dia> dias = D.obtener_dias(dia, dia);
		Iterator it = dias.iterator();
		dia d=null;
		int i=0;
                boolean acaba=false;
		
		if(!dias.isEmpty())
		{
			while(it.hasNext()&&!acaba)
			{       
                                d = new dia();
				d = dias.get(i);
				if(d.fecha().equals(dia))
				{
                                        error="ok";
                                        //d.pagar_dia();
                                        d.pagar_dia(ldates,lcomidas);
					acaba = true;
				}
				it.next();
				i++;
			}
                       
		
			/*if(acaba)
			{
                                existe_dia=true;
				d.pagar_dia();
			}*/
		}
                else error="dieta vacia";
                return error;
        }

	public String pagar_fechas(dieta D, Date Fecha_ini, Date Fecha_fi,List<Date> ldates, List<String> lcomidas) throws Exception//
	{
           
                String error="intervalo no incluido en dieta";
		int i=0;
		dia d;
		boolean acaba = false;
		Date f=new Date();
		List<dia> dias = D.obtener_dias(Fecha_ini, Fecha_fi);
                Iterator it = dias.iterator();
		
		if(!dias.isEmpty()){
                    error="ok";
		
			while(it.hasNext()&&!acaba)
			{
				d = dias.get(i);
				f = d.fecha();
				if(f.after(Fecha_fi))
				{
                                    acaba=true;
                                }
					//d.pagar_dia();
                                else d.pagar_dia(ldates,lcomidas);
				
                        
				
				i++;
				it.next();
			}

		}
                return error;
	}
  
  public String pagar_comida(dieta D,Date diap,int comida) throws Exception//
  {
                String error="dia no incluido en la dieta";
		List<dia> dias = D.consultar_dias();
		Iterator it = dias.iterator();
		dia d=null;
		int i=0;
                boolean acaba=false;
		
		if(!dias.isEmpty())
		{
			while(it.hasNext()&&!acaba)
			{
				d = dias.get(i);
				if(d.fecha().equals(diap))
				{
					acaba = true;
                                        //d.pagar_comida(comida);
                                        error=d.pagar_comida(comida);
				}
				it.next();
				i++;
			}
			/*if(acaba)
			{
				d.pagar_comida(comida);
			}*/
		}
        return error;
	}
  
  public String pagar_comida_fechas(dieta D,Date Fecha_ini,Date Fecha_fi,int comida,List<Date> ldates) throws Exception
  {
                String error="intervalo no incluido en la dieta";
		int i=0;
		dia d;
		boolean acaba = false;
		Date f=new Date();
		List<dia> dias = D.consultar_dias();
                Iterator it = dias.iterator();
		
		if(!dias.isEmpty())
		{
			while(it.hasNext()&&!acaba)
			{
				d = dias.get(i);
				f = d.fecha();
				if(Fecha_ini.equals(f)||Fecha_fi.equals(f)||(Fecha_fi.before(f)&&(Fecha_ini.after(f))))
				{
                                        
					//d.pagar_comida(comida);
                                        error=d.pagar_comida(comida);
                                        if(error.equals("pagado")){
                                        ldates.add(f);
                                        }
				}
				else
				{
					if(Fecha_fi.before(f))
					{
						acaba = true;
					}
				}
				i++;
				it.next();
			}
		}
                return error;
  }

  public List<Date> consultar_pagos_pendientes_dias(dieta D,Date Fecha_ini, Date Fecha_fi) throws Exception
  {
                int i=0;
		int j;
                int k=0;
		List dias_p = new ArrayList();
		List<dia> dias_c;
		dias_c=D.obtener_dias(Fecha_ini, Fecha_fi);
		Iterator it=dias_c.iterator();
                Iterator it2;
		dia d_m;
                List<plato> aux;
                boolean pagado=false;
		
		while(it.hasNext())
		{
                        
			d_m=dias_c.get(k);
			
			for(i=0;i<5;i++)
			{
				pagado=false;
				aux=d_m.lplatos_comida(i);
                                
				it2=aux.iterator();
				j=0;
                                if(!aux.isEmpty())
                                {
                                    
				while(it2.hasNext()&&!pagado)
				{
					if(!aux.get(j).Get_pagado())
					{	
						pagado=true;
						dias_p.add(d_m.fecha());
					}
					it2.next();
					j++;
                                        
				}
                                }
                                
			}
                        k++;
                        it.next();
		}
                
                return dias_p;
	}

  public List<Date> consultar_pagos_pendientes_totales(dieta D) throws Exception
  {///AWALE
		int i=0;
		int j;
                int k=0;
		List dias_p = new ArrayList();
		List<dia> dias_c;
		dias_c=D.consultar_dias();
		Iterator it=dias_c.iterator();
                Iterator it2;
		dia d_m;
                List<plato> aux;
                boolean pagado=false;
		
		while(it.hasNext())
		{
                        
			d_m=dias_c.get(k);
			
			for(i=0;i<5;i++)
			{
				pagado=false;
				aux=d_m.lplatos_comida(i);
                                
				it2=aux.iterator();
				j=0;
                                if(!aux.isEmpty())
                                {
                                    
				while(it2.hasNext()&&!pagado)
				{
					if(!aux.get(j).Get_pagado())
					{	
						pagado=true;
						dias_p.add(d_m.fecha());
					}
					it2.next();
					j++;
                                        
				}
                                }
                                
			}
                        k++;
                        it.next();
		}
                
                return dias_p;
	}

  public boolean[] consultar_pagos_pendientes_dia(dieta D,Date dia) throws Exception
  {
               List<dia> dias = D.consultar_dias();
                Iterator it = dias.iterator();
                dia d=null;
		int i=0;
                int j;
                boolean acaba=false;
		boolean no_pagado=false;
                boolean[] comidas_pendientes = new boolean[5];
                List<plato> aux;
                
		if(!dias.isEmpty())
                {
                    while(it.hasNext()&&!acaba)
                    {
                        d = dias.get(i);
                        if(d.fecha().equals(dia))
                        {
                            acaba = true;
                        }
                        it.next();
                        i++;
                    }
                    if(acaba)
                    {
                        for(i=0;i<5;i++)
                        {
			no_pagado=false;
			aux=d.lplatos_comida(i);
			it=aux.iterator();
			j=0;
			while(it.hasNext()&&!no_pagado)
			{
				if(!aux.get(j).Get_pagado())
				{
					comidas_pendientes[i]=true;
					no_pagado=true;
				}
				it.next();
				j++;
			}
                        if(!no_pagado)
                        {
                            comidas_pendientes[i]=false;
                        }
                        }
		
                }
            }
  return comidas_pendientes;
  }
}
    

